package work.droit.data.search;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import work.droit.data.Champs.FicheChamp;
import work.droit.data.Fiche;
import work.droit.gui.ApiController;
import work.util.data.io.ManipFile;
import work.util.data.table.Tables.Record;
import work.util.editor.EditorLauncher;

public class FicheSearch
{
	private Map<Integer, String>	cacheFiche	= null;

	public FicheSearch()
	{
		cacheFiche = new HashMap<Integer, String>();
	}

	public List<Fiche> findFiches(String searchPattern)
	{
		Fiche ficheTmp = new Fiche();
		ficheTmp.setChamp(Fiche.name, "");
		List<Record<FicheChamp>> fiches = ficheTmp.searchListRecords(Fiche.name, Fiche.name);

		List<Fiche> ficheFound = new ArrayList<Fiche>();

		for (Record<FicheChamp> rec : fiches)
		{
			Fiche fiche = (Fiche) rec;
			String name = (String) fiche.getValue(Fiche.name);

			if (name.contains(searchPattern))
			{
				ficheFound.add(fiche);
				continue;
			}
			if (findInContent(fiche, searchPattern))
			{
				ficheFound.add(fiche);
				continue;
			}
		}

		return ficheFound;
	}

	private boolean findInContent(Fiche fiche, String searchPattern)
	{
		Integer id = (Integer) fiche.getValue(Fiche.id);
		String content = cacheFiche.get(id);
		if (content == null)
		{
			content = ManipFile.getContent(ApiController.pathDocument + id + "f" + EditorLauncher.FILE_EXTENSION);
			cacheFiche.put(id, content);
		}
		if (content.contains(searchPattern))
			return true;
		return false;
	}
}
